【Steam VR 2.0】1.(Steam VR Input) SteamVR 2.0 新版输入系统的使用 手柄按键打印内容 |
您所在的位置:网站首页 › vrchat 绑定steam › 【Steam VR 2.0】1.(Steam VR Input) SteamVR 2.0 新版输入系统的使用 手柄按键打印内容 |
暂时VRTK还无法兼容Steam VR 2.X的版本,因此暂时放弃VRTK,先了解一下SteamVR 2.X如何使用
首先还是完成一个最简单的功能,按Trigger键打印一些东西,并引申到其他按键
对“新版”SteamVR input这个输入系统不太了解的朋友,可以先看看这篇文章 https://blog.csdn.net/lizhenxiqnmlgb/article/details/88566505 简单来说,出这个新版系统就是为了,一次开发,多硬件使用。因为不同硬件的物理按钮等各不相同,例如HTC vive和Oculus的手柄等按键都各不相同。有了新版输入系统,开发者不再需要区别按键是vive的Trigger还是Oculus的Grab,我们只需要在输入系统定义一个事件,类似开火Shoot,然后我们在开发过程中针对Shoot进行开发,后期和不同设备对接,只需要针对shoot对手柄按键进行映射即可。 目前官方为触控事件定义了如下几个类型 输入事件: 布尔就是一些按键,按钮的类型,类似Trigger vec1,可以模拟一些按键的键程,类似你Trigger,勾了多少 vec2,触控板的二维信息 vec3, pose skeleton,关节信息,类似为了精确的手部模型,精确的抓握物体时用的 输出事件: 目前只有一种,就是震动
我使用的是Htc vive 那么开始代码,我使用的unity版本2019.4.2, SteamVR 2.5.0
打开Windows-SteamVR Input窗口 测试使用default-InteractUI (因为和UI交互的按键,一般都会绑定Trigger)
新建场景,将[CameraRig]和[SteamVR]拖到场景中,并删除原相机 左右手柄依然在CameraRig下 每个手柄上都默认挂载着SteamVR_Behaviour_Pose脚本
下面我们新建一个脚本InputTest01.cs,挂载到场景任意物体上 using System.Collections; using System.Collections.Generic; using UnityEngine; using Valve.VR; public class InputTest01 : MonoBehaviour { public SteamVR_Action_Boolean action = SteamVR_Input.GetAction("InteractUI"); public SteamVR_Behaviour_Pose pose; // Update is called once per frame void Update() { if (action.GetStateDown(pose.inputSource)) { Debug.Log("ButtonDown"); } if (action.GetStateUp(pose.inputSource)) { Debug.Log("ButtonUp"); } if (action.GetState(pose.inputSource)) { Debug.Log("Button"); } //if (action.GetLastStateDown(pose.inputSource)) { // Debug.Log("ButtonDownLater"); //} } }为Pose赋值,这里要使用哪个手柄的按键,就将哪个手柄赋值给pose即可 运行结果
布尔型的交互事件,一共有三种监听(其实是六种),类似原Input系统的Button,ButtonDown和ButtonUp事件。 而另一种GetLastStateDown(也是对应三种),会在原事件执行后执行。 GetStateDown和GetLastStateDown,会先执行GetStateDown事件然后执行GetLastStateDown
下面我们创建一个自定义事件,remoter(遥控器),采用Vector2类型的,来获取手指放在touch Pad的二维坐标 在SteamVR input中添加remoter如下图
然后点击右下角按钮Open binding UI 点击编辑 可以看见,窗口中已经提示有按键未绑定 我们在左侧选择触控板,点击“位置”,为其赋值为我们创建的remoter(“an remoter”就是我们在unity中添加的描述) 绑定完成后,回到Unity 在脚本中添加如下代码 首先获取到我们刚刚写的remoter public SteamVR_Action_Vector2 remoter = SteamVR_Input.GetAction("remoter");然后在Update中打印内容 //只要手放在触控板上,即可触发 if (remoter.GetChanged(pose.inputSource)) { //获取手指在触控板的坐标位置 Debug.Log("Axis=" + remoter.GetAxis(pose.inputSource)+ " || Axis Delta=" + remoter.GetAxisDelta(pose.inputSource)); }运行时,手触摸触控板(注意,你的pose拖拽的哪个手柄,哪个手柄的触控板才可触发),可以看到打印结果
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |